TypeScript 50.6%
JavaScript 46.1%
SQL 2.1%
Shell 0.6%
CSS 0.5%
1import { NextRequest, NextResponse } from "next/server";2import { z } from "zod";3import { assertSameOrigin, requireUser } from "@/lib/auth/session";4import { getThread, reply, setInquiryStatus } from "@/lib/inquiries/service";5import { handle, parseBody } from "@/lib/api";6export const dynamic = "force-dynamic";7type P = { params: Promise<{ id: string }> };8export async function GET(_req: NextRequest, { params }: P) { try { const u = await requireUser(); const { id } = await params; return NextResponse.json(await getThread(id, u.id)); } catch (e) { return handle(e); } }9const Body = z.object({ body: z.string().trim().min(1).max(3000), idempotencyKey: z.string().max(80).optional() });10export async function POST(req: NextRequest, { params }: P) { try { await assertSameOrigin(); const u = await requireUser(); const { id } = await params; const b = await parseBody(req, Body); const m = await reply(id, u.id, b.body, b.idempotencyKey); return NextResponse.json({ ok: true, message: m }, { status: 201 }); } catch (e) { return handle(e); } }11const Patch = z.object({ status: z.enum(["OPEN", "ARCHIVED", "BLOCKED"]) });12export async function PATCH(req: NextRequest, { params }: P) { try { await assertSameOrigin(); const u = await requireUser(); const { id } = await params; const b = await parseBody(req, Patch); await setInquiryStatus(id, u.id, b.status); return NextResponse.json({ ok: true }); } catch (e) { return handle(e); } }13